package com.racheiros;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;


import com.racheiros.model.Usuario;


@ManagedBean
@SessionScoped
public class UsuarioBean implements Serializable{
	private static final long serialVersionUID = 1L;
	private Usuario usuario = new Usuario();
	private Usuario usuarioLogado = new Usuario();
	private List<Usuario> usuarios = new ArrayList<Usuario>();
	
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public List<Usuario> getUsuarios() {
		return usuarios;
	}
	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	public String add(){
		
		usuarios.add(getUsuario());
		System.out.println(usuarios.size());
		
		/* 
		 *  acesso ao banco.
		 */
		
		DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

		Key customerKey = KeyFactory.createKey("Usuario", getUsuario().getUserName());
		Entity usuario = new Entity("Usuario" ,customerKey);

		usuario.setProperty("UserName", getUsuario().getUserName());
		usuario.setProperty("Password", getUsuario().getUserPassword());
		usuario.setProperty("Nome", getUsuario().getNome());
		usuario.setProperty("Sobrenome",getUsuario().getSobrenome());
		//Date hireDate = new Date();
		//usuario.setProperty("dataNascimento",hireDate);

		//employee.setProperty("attendedHrTraining", true);
		datastore.put(usuario);
		/*
		 * 
		 */
		
		return "welcome";
	}
	public List<Entity> lista(){
		DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
		Query query = new Query("Usuario");
		List<Entity> usuarios = (List<Entity>) datastore.prepare(query);
		return usuarios;
	}
	public String remover(){
		int i = 0;
		for(Usuario u: usuarios){
			
			if(u.getUserName().equals(getUsuario().getNome()))
				usuarios.remove(i);
			i++;
		}
		
		return "welcome";
	}
	public String atualizar(){
		int i = 0;
		for(Usuario u: usuarios){
			
			if(u.getUserName().equals(getUsuario().getNome()))
				usuarios.set(i,getUsuario());
			i++;
		}
		
		
		DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
		 

 
		Query query = new Query("Usuario");
		query.addFilter("UserName", FilterOperator.EQUAL, getUsuario().getUserName());
		PreparedQuery pq = datastore.prepare(query);
		Entity usuario = pq.asSingleEntity();
 
		usuario.setProperty("Password", getUsuario().getUserPassword());
		usuario.setProperty("Nome", getUsuario().getNome());
		usuario.setProperty("Sobrenome", getUsuario().getSobrenome());
 
                datastore.put(usuario);
		
		
		
		
		return "welcome";
	}
	
}